package com.tieba.mapper;


import com.tieba.pojo.Collection;
import com.tieba.pojo.Comment;
import com.tieba.pojo.Like;
import com.tieba.pojo.Message;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface MessageMapper {

    /**
     * 查询所有留言
     * @return
     */
    @Select("select * from message where commented_id is null")
    List<Message> list();

    /**
     * 根据留言id查询留言
     * @return
     */
    @Select("select * from message where id=#{id}")
    Message getById(Integer id);

    /**
     * 根据用户id查询某个用户的留言
     * @return
     */
    @Select("select * from message where user_id=#{id}")
    List<Message> listByOwerId(Integer id);

    /**
     * 根据被评论的留言id查询
     * @return
     */
    @Select("select * from message where commented_id=#{id}")
    List<Message> listByCommentedId(Integer id);

    /**
     * 新增留言
     * @param message
     */
    @Insert("insert into message (user_id, message, likes, comments, collections, commented_id, create_time) " +
            "values (#{userId},#{message},#{likes},#{comments},#{collections},#{commentedId},#{createTime})")
    void add(Message message);

    /**
     * 删除留言,xml实现
     * @param ids 根据id批量删除
     */
    void delete(List<Integer> ids);

    /**
     * 更新用户数据,xml注解实现
     * @param message
     */
    void update(Message message);
    /**
     * 点赞
     * @param like
     */
    @Insert("insert into user_like (user_id, message_id) VALUES (#{userId},#{messageId})")
    void addlike(Like like);

    /**
     * 评论
     * @param comment
     */
    @Insert("insert into user_comment (user_id, message_id,comment_id ) values (#{userId},#{messageId},#{commentId});")
    void addcomment(Comment comment);

    /**
     * 收藏
     * @param collection
     */
    @Insert("insert into user_collection (user_id, message_id,create_time) VALUES (#{userId},#{messageId},#{createTime})")
    void addcollection(Collection collection);


    /**
     * 根据用户id和被评论的留言的id查询新增评论的id,因为只有将评论加到数据库中才会有评论自己的id
     * @return
     */
    @Select("select id from message where user_id=#{userId} and commented_id=#{commentedId}")
    Integer getByUserIdAndCommentedId(@Param("userId") Integer userId,@Param("commentedId") Integer commentedId);

    /**
     * 根据用户id查询user_like中用户点了赞的评论的id集合
     * @param userId
     * @return
     */
    @Select("select message_id from user_like where user_id=#{userId}")
    List<Integer> listLikeByUserId(Integer userId);

    /**
     * 根据用户id集合查询message中用户评论了的评论的id集合
     * @param userId
     * @return
     */
    @Select("select id from message where user_id=#{userId} and commented_id is not null")
    List<Integer> listCommentByUserId(Integer userId);

    /**
     * 根据用户id查询user_collection中用户收藏了的评论的id集合
     * @param userId
     * @return
     */
    @Select("select message_id from user_collection where user_id=#{userId}")
    List<Integer> listCollectionByUserId(Integer userId);



    /**
     * 根据ids集合查询评论
     * @param ids
     * @return
     */
    //@Select("select * from message where id in #{ids}")
    List<Message> listByIds(List<Integer> ids);


    /**
     * 根据主键集合ids删除点赞
     * @param ids
     */
    //@Delete("delete from user_like where id in #{ids}")
    void deleteLike(List<Integer> ids);

    /**
     * 删除一个收藏
     * @param collection
     */
    @Delete("delete from user_collection where user_id=#{userId} and message_id=#{messageId}")
    void deleteCollection(Collection collection);

    /**
     * 更新收藏信息
     */
    //@Update("update user_collection set existed=false where id in #{collectionIds}")
    void updateCollection(List<Integer> collectionIds);

    /**
     * 根据收藏评论的id查询收藏表的主键id
     * @param messageId
     * @return
     */
    @Select("select id from user_collection where message_id=#{messageId}")
    List<Integer> getByCollectionID(Integer messageId);

    /**
     *根据被收藏的评论的id查询对应用户的id
     */
    @Select("select user_id from user_collection where message_id=#{messageId}")
    List<Integer> getUserIdByCollectionID(Integer messageId);

    /**
     *通过被点赞的评论的id查询点赞信息
     * @param id
     * @return
     */
    @Select("select * from user_like where message_id=#{id}")
    List<Like> getByLikeID(Integer id);

    /**
     * 根据被点赞的评论的id获取主键id集合
     * @param id
     * @return
     */
    @Select("select id from user_like where message_id=#{id}")
    List<Integer> getIdsByLikeID(Integer id);
    /**
     * 查找评论了这个帖子的所有评论
     * @param commentedId
     * @return
     */
    @Select("select id from message where commented_id =#{commentedId}")
    List<Integer> getBycommentedId(Integer commentedId);


}
